iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Python

30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手系列 第 25

如何使用 Python 的 openpyxl 建立 Excel 圖表?【Python 處理 Excel #25】

  • 分享至 

  • xImage
  •  

本篇文章同步發布於 如何使用 Python 的 openpyxl 建立 Excel 圖表?【Python 處理 Excel #25】

前言

說到用 Excel 做報告,少不了提供圖表吧。Python 的 openpyxl 套件不僅可以寫入 Excel 資料、調整 Excel 儲存格內容與格式,它也可以在 Excel 檔案中建立圖表。這篇文章介紹如何使用 openpyxl 建立 Excel 圖表,文章聚焦於建立長條圖、折線圖和圓餅圖等三種圖表。


使用 openpyxl 建立 Excel 圖表的步驟

使用 openpyxl 建立 Excel 圖表的過程大致可以分為以下 6 個步驟:

  1. 建立圖表物件,例如 BarChartLineChartPieChart
  2. 使用 Reference 定義圖表數據範圍 。
  3. 使用 add_data 方法增加數據到圖表。
  4. 使用 set_categories 方法設置類別 (如果適用)。
  5. 自定義圖表樣式和格式 (可選)。
  6. 使用 add_chart 方法將圖表增加到工作表。

建立圖表物件

接下來先呈現三段比較長的程式碼,分別用於建立長條圖 (bar chart)、折線圖 (line chart) 以及圓餅圖 (pie chart),再分段落講解程式碼細節。

建立長條圖

首先 openpyxl 可以透過 BarChart 類別產生長條圖。

import openpyxl
from openpyxl.chart import BarChart, Reference

# 建立一個新的活頁簿
wb = openpyxl.Workbook()
ws = wb.active

# 增加數據到工作表
data = [
    ['product_name', 'sales_volume'],
    ['S7000', 5000],
    ['A5000', 3000],
    ['A3000', 1000]
]
for row in data:
    ws.append(row)

# 建立長條圖物件
bar_chart = BarChart()

# 定義數據範圍
data_ref = Reference(ws, min_row=1, min_col=2, max_row=4)

# 增加數據到圖表
bar_chart.add_data(data_ref, titles_from_data=True)

# 定義類別名稱
cats_ref = Reference(ws, min_row=2, min_col=1, max_row=4)
bar_chart.set_categories(cats_ref)

# 將圖表增加到工作表
ws.add_chart(bar_chart, "E5")

# 儲存檔案
wb.save("bar_chart_example.xlsx")

建立折線圖

以下是建立折線圖的程式碼:

from openpyxl.chart import LineChart

# 建立折線圖物件
line_chart = LineChart()

# 使用相同數據範圍
line_chart.add_data(data_ref, titles_from_data=True)
line_chart.set_categories(cats_ref)

# 將折線圖增加到工作表
ws.add_chart(line_chart, "E20")

wb.save("line_chart_example.xlsx")

建立圓餅圖

最後是建立圓餅圖的程式碼:

from openpyxl.chart import PieChart

# 建立圓餅圖
pie_chart = PieChart()

# 使用相同數據範圍
pie_chart.add_data(data_ref, titles_from_data=True)
pie_chart.set_categories(cats_ref)

# 將圓餅圖增加到工作表
ws.add_chart(pie_chart, "E35")

wb.save("pie_chart_example.xlsx")

如何使用 Reference 定義圖表數據範圍 ?

前面的程式碼透過 Reference 類別的物件 data_ref 定義數據範圍。Reference 允許使用者指定工作表中的某個區域作為圖表的數據來源。

Reference 使用方法

Reference(worksheet, min_row, min_col, max_row, max_col)

參數解釋

  • worksheet: 工作表物件。
  • min_row:數據範圍的起始列。
  • min_col:數據範圍的起始欄。
  • max_row:數據範圍的結束列。
  • max_col:數據範圍的結束欄。

例如:

# 定義數據範圍:選擇 B 欄的第 1 列到第 4 列
data_ref = Reference(ws, min_row=1, min_col=2, max_row=4)

如果需要動態計算範圍以適應數據變動,可以使用類似 ws.max_row 的方式計算最後一列。


如何使用 openpyxl 增加 Excel 圖表數據與類別標籤?

add_data() 方法可以將定義好的數據範圍添加到圖表中。該方法的 titles_from_data 參數用於指定數據範圍中是否包含標題。

# 增加數據到圖表
bar_chart.add_data(data_ref, titles_from_data=True)

另外,set_categories() 方法可以指定圖表的類別標籤 (通常是 X 軸的標籤)。

# 定義類別標籤的範圍
cats_ref = Reference(ws, min_row=2, min_col=1, max_row=4)
bar_chart.set_categories(cats_ref)

如何使用 openpyxl 自定義 Excel 圖表樣式?

除了基本圖表,openpyxl 提供自定義圖表樣式的功能,例如設定圖表標題、軸標題、樣式顏色等等。

設定標題

# 設定圖表標題
bar_chart.title = "銷售數據"

設定軸標題

# 設定 X 軸標題
bar_chart.x_axis.title = "產品"
# 設定 Y 軸標題
bar_chart.y_axis.title = "銷售量"

更改圖表樣式

# 更改圖表樣式
bar_chart.style = 10

目前 openpyxl 官方文件沒有明確指出所有圖表類型的具體樣式數量,但使用者通常能有 48 種樣式選擇,也就是參數 style 的範圍會從 1 到 48。實際的樣式數量取決於所使用的 Excel 版本以及特定的圖表類型。


如何使用 openpyxl 增加圖表到 Excel 工作表?

add_chart() 方法可以將圖表增加到工作表的指定位置。例如這裡將圖表放置在儲存格 E5 位置:

# 將圖表增加到工作表
ws.add_chart(bar_chart, "E5")

總結

  • openpyxl 可以建立多種 Excel 圖表,包括長條圖、折線圖和圓餅圖。
  • Referenceadd_data()set_categories()add_chart() 這四個類別與方法是使用 openpyxl 建立 Excel 圖表的關鍵。
  • Reference 用於定義圖表的數據範圍,add_data()set_categories() 用於增加數據和類別標籤。
  • add_chart() 可以將圖表增加到 Excel 工作表中。

本篇文章同步發布於 如何使用 Python 的 openpyxl 建立 Excel 圖表?【Python 處理 Excel #25】


上一篇
Python 使用 openpyxl 建立 Excel 資料群組與凍結視窗【Python 處理 Excel #24】
下一篇
為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?有什麼優點?【Python 處理 Excel #26】
系列文
30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言